package es.gesfutbol.web;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.springframework.ui.ModelMap;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import es.gesfutbol.dao.IJornadaDao;
import es.gesfutbol.dao.ILligaDao;
import es.gesfutbol.domini.implementacio.Jornada;
import es.gesfutbol.domini.implementacio.Lliga;

public class JornadaController extends MultiActionController{

	private IJornadaDao jornadaDao;
	private ILligaDao lligaDao;

	public IJornadaDao getJornadaDao() {
		return jornadaDao;
	}

	public void setJornadaDao(IJornadaDao jornadaDao) {
		this.jornadaDao = jornadaDao;
	}
	
	public ILligaDao getLligaDao() {
		return lligaDao;
	}

	public void setLligaDao(ILligaDao lligaDao) {
		this.lligaDao = lligaDao;
	}
	
//	/**
//	 * Mètode que inicialitza la pàgina de lligues i envia la llista
//	 * de lligues actuals a la vista.
//	 * 
//	 * @param request
//	 * @param response
//	 * @return
//	 * @throws Exception
//	 */
//	public ModelAndView init(HttpServletRequest request,
//	HttpServletResponse response) throws Exception {
//
//		List<Jornada> jornades = jornadaDao.findAll();
//				
//		Jornada nouJornada = new Jornada();
//				
//		ModelMap modelMap = new ModelMap();
//		modelMap.put("llistatJornades", jornades);
//		
//		modelMap.put("jornada", nouJornada);
//		return new ModelAndView("administracion/jornades", modelMap);
//	}
	
	/**Mètode que mostra totes les jornades que pertanyen a una lliga
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception 
	 * @throws HibernateException 
	 * @throws MappingException 
	 */
	public ModelAndView viewJornadesLliga(HttpServletRequest request,
			HttpServletResponse response){
		
				List<Lliga> lligues = lligaDao.findAll();
		
				Long idLliga = Long.parseLong(request.getParameter("idLliga"));
				Lliga lligaActual = lligaDao.findById(idLliga);
				lligaActual = lligaDao.deproxy(lligaActual);
				
//				List<Jornada> jornades = jornadaDao.findAll();
				List<Jornada> jornades = jornadaDao.findByIdLliga(idLliga);
								
				Jornada nouJornada = new Jornada();
				nouJornada.setLliga(lligaActual);

				ModelMap modelMap = new ModelMap();
				modelMap.put("lligaActual", lligaActual);
				modelMap.put("llistatLligues", lligues);
				modelMap.put("jornada", nouJornada);
				modelMap.put("llistatJornades", jornades);
				return new ModelAndView("administracion/jornades", modelMap);		
	}

	/**
	 * Mètode que obté de la request l'idJornada a modificar, el cerca
	 * i retorna els valors al formulari de jornades.
	 * 
	 * @param request
	 * @param response
	 * @return
	 */
	public ModelAndView viewUpdate(HttpServletRequest request,
			HttpServletResponse response){
		
		Long idLliga = Long.parseLong(request.getParameter("idLliga"));
		Lliga lligaActual = lligaDao.findById(idLliga);
		lligaActual = lligaDao.deproxy(lligaActual);
		
		List<Jornada> jornades = jornadaDao.findByIdLliga(idLliga);
		
		Long idJornada = Long.parseLong(request.getParameter("idJornada"));
		Jornada jornada = jornadaDao.findById(idJornada);
		
		ModelMap model = new ModelMap();
		model.put("lligaActual", lligaActual);
		model.put("llistatJornades", jornades);
		model.put("jornada", jornada);
		return new ModelAndView("administracion/jornades", model);
	}
	
	/**
	 * Mètode que elimina una lliga de la bbdd.
	 * 
	 * @param request
	 * @param response
	 * @return
	 */
	public ModelAndView delete(HttpServletRequest request,
			HttpServletResponse response){
		
		Long idJornada = Long.parseLong(request.getParameter("idJornada"));
		Long idLliga = Long.parseLong(request.getParameter("idLliga"));
		jornadaDao.delete(idJornada);
		
		String sLliga= idLliga.toString();
		String sURL = "redirect:viewJornadesLliga.htm?idLliga=";
		
		String redirect= sURL.concat(sLliga);

		return new ModelAndView(redirect);
	}
	
	/**
	 * Mètode que guarda els canvis tant de l'afegir com l'editar
	 * lliga.
	 * 
	 * @param request
	 * @param response
	 * @param equip
	 * @return
	 */
	public ModelAndView addOrUpdate(HttpServletRequest request,
			HttpServletResponse response, Jornada jornada){
		
		Long idLliga = Long.parseLong(request.getParameter("idLliga"));
		Lliga lligaActual = lligaDao.findById(idLliga);
		lligaActual = lligaDao.deproxy(lligaActual);
		
		jornada.setLliga(lligaActual);
		
		jornadaDao.save(jornada);
		
		String sLliga= idLliga.toString();
		String sURL = "redirect:viewJornadesLliga.htm?idLliga=";
		
		String redirect= sURL.concat(sLliga);

		return new ModelAndView(redirect);
	}
}
